﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace ToolsViClip
{
    public partial class FrmTruyenTranh : Form
    {
        viclip.CTRStorys _Storys = null;
        /// <summary>
        /// 
        /// </summary>
        public viclip.CTRStorys Storys
        {
            get { return _Storys; }
            set { _Storys = value; }
        }
        
        public FrmTruyenTranh()
        {
            InitializeComponent();
        }

        bool Upload(string ftpServerIP, string filename, string ftpUserID, string ftpPassword, string ten)
        {
            FileInfo fileInf = new FileInfo(filename);
            //string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
            FtpWebRequest reqFTP;

            // Create FtpWebRequest object from the Uri provided
            reqFTP = (FtpWebRequest)FtpWebRequest.Create
                     (new Uri("ftp://" + ftpServerIP + "/" + ten));

            // Provide the WebPermission Credintials
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

            // By default KeepAlive is true, where the control connection
            // is not closed after a command is executed.
            reqFTP.KeepAlive = false;

            // Specify the command to be executed.
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

            // Specify the data transfer type.
            reqFTP.UseBinary = true;

            // Notify the server about the size of the uploaded file
            reqFTP.ContentLength = fileInf.Length;

            // The buffer size is set to 2kb
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;

            // Opens a file stream (System.IO.FileStream) to read the file
            // to be uploaded
            FileStream fs = fileInf.OpenRead();

            try
            {
                // Stream to which the file to be upload is written
                Stream strm = reqFTP.GetRequestStream();

                // Read from the file stream 2kb at a time
                contentLen = fs.Read(buff, 0, buffLength);

                // Till Stream content ends
                while (contentLen != 0)
                {
                    // Write Content from the file stream to the FTP Upload
                    // Stream
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }

                // Close the file stream and the Request Stream
                strm.Close();
                fs.Close();
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Upload Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
            return false;
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmTruyenTranh_Load(object sender, EventArgs e)
        {
            using (viclip.AccDBTRCategories db = new viclip.AccDBTRCategories())
            {
                db.FillComboBox(Program.Login, cmbCatalog, ""); 
            }

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSamllAddFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Multiselect = false;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image = Image.FromFile(dlg.FileName);
                if (pictureBox1.Image != null &&
                    pictureBox1.Image.Size.Width == 52 && pictureBox1.Image.Size.Height == 58)
                {
                    txtFileSmallImage.Text = dlg.FileName;
                }
                else
                {
                    txtFileSmallImage.Text = dlg.FileName;

                    Bitmap tmp = new Bitmap(52, 58);
                    Graphics gg = Graphics.FromImage(tmp);
                    gg.DrawImage(pictureBox1.Image, new Rectangle(0, 0, 52, 58), new Rectangle(0, 0, pictureBox1.Image.Width, pictureBox1.Image.Height), GraphicsUnit.Pixel);

                    tmp.Save("D:\\tmp.png");
                    pictureBox1.Image = Image.FromFile(dlg.FileName);

                    txtFileSmallImage.Text = "D:\\tmp.png";
                }
            }
        }

        private void btnAddFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Multiselect = false;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pictureBox2.Image = Image.FromFile(dlg.FileName);
                if (pictureBox2.Image != null &&
                    pictureBox2.Image.Size.Width == 100 && pictureBox2.Image.Size.Height == 145)
                {
                    txtFileImages.Text = dlg.FileName;
                }
                else
                {
                    txtFileImages.Text = dlg.FileName;

                    Bitmap tmp = new Bitmap(100, 145);
                    Graphics gg = Graphics.FromImage(tmp);
                    gg.DrawImage(pictureBox2.Image, new Rectangle(0, 0, 100, 145), new Rectangle(0, 0, pictureBox2.Image.Width, pictureBox2.Image.Height), GraphicsUnit.Pixel);

                    tmp.Save("D:\\tmp2.png");
                    pictureBox2.Image = Image.FromFile(dlg.FileName);

                    txtFileImages.Text = "D:\\tmp2.png";
                }
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAddClip_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Multiselect = false;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                //txtFileClip.Text = dlg.FileName;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnUpload_Click(object sender, EventArgs e)
        {
            if (validate())
            {
                if (MessageBox.Show("Bạn có cần kiểm tra lại dữ liệu lần nữa trước khi lưu hay không?\n(Bấm YES để kiểm tra lại, NO nếu muốn lưu ngay)", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                {
                    this.Storys.storyname = txtTitle.Text.Trim();
                    this.Storys.files = txtSoTap.Text.Trim();
                    this.Storys.author = txtTacGia.Text.Trim();
                    this.Storys.publishers = txtNhaXuatBan.Text.Trim();
                    this.Storys.descripptions = txtDescription.Text.Trim();
                    this.Storys.serverlink = txtMayChuTruyen.Text.Trim();
                    this.Storys.categories = new viclip.CTRCategories(Program.Login, (int)cmbCatalog.SelectedValue);
                    if (this.Storys.CheckKey("storyname", this.Storys.storyname, "tblTRStorys"))
                    {
                        MessageBox.Show("Tên thực đơn này đã có trong CSDL!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    if (this.Storys.Save() &&
                        Upload("112.213.89.156", txtFileSmallImage.Text, ftpUserID.Text, ftpPassword.Text, "TRTR\\smallimages\\" + this.Storys.storyid.ToString() + ".png") &&
                        Upload("112.213.89.156", txtFileImages.Text, ftpUserID.Text, ftpPassword.Text, "TRTR\\images\\" + this.Storys.storyid.ToString() + ".png"))
                    {
                        MessageBox.Show("Đã cập nhật thành công vào hệ thống chờ duyệt nội dung.", "Thông báo");
                        this.groupBox1.Enabled = false;
                        btnAddNew.Enabled = true;
                    }
                    else
                    {
                        MessageBox.Show("Lỗi cập nhật xin vui lòng kiểm tra nội dung và thực hiện cập lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }

        bool validate()
        {
            if (txtTitle.Text == "" || txtTitle.Text.Trim() == "" ||
                txtTitle.Text.Trim().Length < 2)
            {
                MessageBox.Show("Tên tiêu đề clip quá ngắn, xin vui lòng nhập lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtTitle.Focus();
                txtTitle.SelectAll();
                return false;
            }
            if (txtSoTap.Text == "" || txtSoTap.Text.Trim() == "" ||
                txtSoTap.Text.Trim().Length < 2)
            {
                MessageBox.Show("Nội dung mô ta clip quá ngắn, xin vui lòng nhập lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtSoTap.Focus();
                txtSoTap.SelectAll();
                return false;
            }
            if ((double)numLength.Value == 0.00)
            {
                MessageBox.Show("Bạn chưa chỉ ra độ dài của clip, xin vui lòng nhập lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                numLength.Focus();
                return false;
            }
            if (txtLinkYoutube.Text == "" || txtLinkYoutube.Text.Trim() == "")
            {
                MessageBox.Show("Bạn chưa cung cấp link tải clip, xin vui lòng nhập lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtLinkYoutube.Focus();
                txtLinkYoutube.SelectAll();
                return false;
            }
            if (txtFileSmallImage.Text == "" || txtFileSmallImage.Text.Trim() == "")
            {
                MessageBox.Show("Xin vui lòng chọn hình logo cho món ăn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtFileSmallImage.Focus();
                txtFileSmallImage.SelectAll();
                return false;
            }
            if (txtFileImages.Text == "" || txtFileImages.Text.Trim() == "")
            {
                MessageBox.Show("Xin vui lòng chọn hình đại diện cho món ăn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtFileSmallImage.Focus();
                txtFileSmallImage.SelectAll();
                return false;
            }
            if (pictureBox1.Image == null)
            {
                MessageBox.Show("Hình đại diện không hợp lệ, xin vui lòng chọn lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtFileSmallImage.Focus();
                txtFileSmallImage.SelectAll();
                return false;
            }
            return true;
        }

        private void btnAddNew_Click(object sender, EventArgs e)
        {
            this.txtTitle.Text = "";
            this.txtSoTap.Text = "";
            this.txtIDClip.Text = "";
            this.txtLinkYoutube.Text = "-1";
            this.txtDescription.Text = "";
            this.txtFileImages.Text = "";
            this.txtFileSmallImage.Text = "";
            this.pictureBox1.Image = null;
            this.pictureBox2.Image = null;
           
            this.Storys = new viclip.CTRStorys(Program.Login);

            this.btnAddNew.Enabled = false;
            this.groupBox1.Enabled = true;
        }
    }
}